import sys                                 # 导入sys模块
from PyQt6.QtWidgets import *              # 导入PyQt6的QtWidgets模块
from PyQt6.QtGui import *                   # 导入PyQt6的QtGui模块

class MainWindow(QMainWindow):              # 创建一个继承自QMainWindow的类叫做MainWindow
    count = 0                               # 在类中定义一个count属性并初始化为0
    def __init__(self, parent=None):        # 构造函数，初始化窗口
        super(MainWindow, self).__init__(parent)   # 调用父类的构造函数
        self.mdi = QMdiArea()                # 实例化QMdiArea区域对象并赋值给mdi属性
        self.setCentralWidget(self.mdi)      # 设置QMdiArea区域对象为窗口的中央控件
        bar = self.menuBar()                 # 获取菜单栏对象
        file = bar.addMenu('窗口')           # 在菜单栏中添加一个菜单叫做'窗口'
        file.addAction('新建')               # 在'窗口'菜单中添加一个动作叫做'新建'
        file.addAction('平铺')               # 在'窗口'菜单中添加一个动作叫做'平铺'
        file.addAction('级联')               # 在'窗口'菜单中添加一个动作叫做'级联'
        # 点击QAction绑定自定义的槽函数
        file.triggered[QAction].connect(self.actionFunc)
        self.setWindowTitle("MDI测试")       # 设置窗口标题为'MDI测试'

    def actionFunc(self, fAction):           # 定义一个actionFunc方法，参数为QAction对象
        if fAction.text() == '新建':         # 如果动作的文本是'新建'
            MainWindow.count = MainWindow.count + 1     # 增加一个子窗口个数
            sub = QMdiSubWindow()                     # 实例化QMdiSubWindow对象并赋值给sub
            sub.setWidget(QTextEdit())                # 向sub中添加一个QTextEdit控件作为内部控件
            sub.setWindowTitle('子窗口' + str(MainWindow.count))    # 设置子窗口的标题
            self.mdi.addSubWindow(sub)                # 将子窗口添加到MDI区域
            sub.show()                                # 子窗口显示
        if fAction.text() == '级联':           # 如果动作的文本是'级联'
            self.mdi.cascadeSubWindows()           # 在MDI区域级联显示子窗口
        if fAction.text() == '平铺':           # 如果动作的文本是'平铺'
            self.mdi.tileSubWindows()              # 在MDI区域平铺显示子窗口

if __name__ == '__main__':                   # 判断是否为直接运行的脚本
    app = QApplication(sys.argv)              # 创建一个QApplication对象并传入参数
    demo = MainWindow()                       # 创建一个MainWindow对象并赋值给demo
    demo.show()                               # 显示窗口
    sys.exit(app.exec())                      # 退出应用程序